/**
 * Created on [2018/12/5 上午12:12] by lidi
 * <p>
 * 项目名称: gaia-commons
 * <p>
 * 本程序版权属于福建慧政通信息科技有限公司所有。
 * <p>
 * 任何组织和个人未经福建慧政通信息科技有限公司许可与授权,不得擅自传播、复制、更改该程序的内容。
 * 本程序受版权法和国际条约的保护。如未经授权而擅自复制或传播本程序(或其中任何部分),
 * 将受到严厉的刑事及民事制裁，并将在法律许可的范围内受到最大可能的起诉!
 * <p>
 * ©2018 福建慧政通信息科技有限公司
 */

package com.lry.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 提供常用的手机号码工具方法。
 *
 * @author 李迪
 */
public final class PhoneNumberUtil {

    /**
     * 手机号码长度
     */
    private static final int PHONE_NUMBER_LENGTH = 11;

    /**
     * 私有化构造函数，防止外部实例化。
     */
    private PhoneNumberUtil() {
    }

    /**
     * 判断手机号码是否合法。
     *
     * @param phoneNumber 手机号码。
     * @return 如果手机号码合法则返回true，否则，返回false。
     */
    public static boolean isValaid(String phoneNumber) {
        if (StringUtil.isEmpty(phoneNumber)) {
            return false;
        }

        if (phoneNumber.length() != PHONE_NUMBER_LENGTH) {
            return false;
        }

        /**
         * 中国电信号段 133、149、153、173、177、180、181、189、199
         * 中国联通号段 130、131、132、145、155、156、166、175、176、185、186
         * 中国移动号段 134(0-8)、135、136、137、138、139、147、150、151、152、157、158、159、178、182、183、184、187、188、198
         * 其他号段
         * 14号段以前为上网卡专属号段，如中国联通的是145，中国移动的是147等等。
         * 虚拟运营商
         * 电信：1700、1701、1702
         * 移动：1703、1705、1706
         * 联通：1704、1707、1708、1709、171
         * 卫星通信：1349
         */
        String regex
            = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(phoneNumber);

        return m.matches();
    }

    /**
     * 对给定的手机号码进行脱敏。
     *
     * @param phoneNumber 手机号码。
     * @return 如果给定的手机号码合法则返回脱敏后的手机号码，否则，返回null。
     */
    public static String desensitize(String phoneNumber) {
        if (!isValaid(phoneNumber)) {
            return null;
        }

        return phoneNumber.substring(0, 3) + "******" + phoneNumber.substring(9);
    }
}
